Cloud Storageに保存したCSVファイルをDataFrameとしてPython上で呼び出してみた
クラスメソッド株式会社データアナリティクス事業本部所属のニューシロです。
今回はGoogle CloudのサービスであるCloud Storageに保存したCSVファイルをDataFrameとしてPython上で呼び出してみました。
以前に書いた以下の記事と方向性は同じです。
やりたいこと
Python上でCloud Storageに保存したCSVファイルを読み込んでDataFrameを作成し、inputの値に対応するデータを出力します。
本題
環境
ツールはGoogle CloudのCloud Shell Editorを使用しました。
CSVファイル
こちらのCSVファイルをCloud Storageに保存し、Python上で呼び出したいと思います。
CSVファイルには動物の英語名、日本語名、鳴き声、場所を書いてみました。
en_name,jp_name,cry,place dog,"いぬ","ワン","外" cat,"ねこ","ニャー","家" horse,"うま","ヒヒーン","牧場"
保存したバケット名はdevelopersio
で、オブジェクト名はanimals.csv
です。
Pythonコード
流れとしては、Cloud Storageからdownload_as_bytes
でCSVファイルを読み込み、
io.BytesIO
とpandas.read_csv
でPandasのDataFrameオブジェクトを作成しています。
今回はinput
を用いて、入力された英語の動物名に対応する行を取得するようにしました。
df.query
でDataFrameから該当する行を検索します。変数はdf.loc
でそれぞれ取得しています。
また、該当するデータがなかった場合用のprint文もif
で用意しました。
- 参照:Class Blob (2.13.0) | Python client library | Google Cloud - download_as_bytes
- 参照:io --- ストリームを扱うコアツール — Python 3.12.0 ドキュメント - io.BytesIO
- 参照:pandas.read_csv — pandas 2.1.3 documentation - pandas.read_csv
- 参照:pandas.DataFrame.query — pandas 2.1.3 documentation - pandas.DataFrame.query
- 参照:pandas.DataFrame.loc — pandas 2.1.3 documentation - pandas.DataFrame.loc
以下が使用するPythonのコードです。
from io import BytesIO import pandas as pd from google.cloud import storage def search_animal(input_en_name): #CSVファイルをCloud Storageからbytes型として取得 storage_client = storage.Client() bucket = storage_client.get_bucket("developersio") blob = bucket.blob("animals.csv") bytes_object = blob.download_as_bytes() # 取得したCSVファイルからDataFrameオブジェクトを作成 stream = BytesIO(bytes_object) animals_df = pd.read_csv(stream) target_df = animals_df.query(f"en_name == '{input_en_name}'") # 全データと一致しなかった場合 if len(target_df) == 0: print("その動物はいなかったよ!") # 一致した場合は他の変数も取得しprint文で出力 else: jp_name = target_df.loc[0, "jp_name"] cry = target_df.loc[0, "cry"] place = target_df.loc[0, "place"] print(f"{jp_name}だよ! {cry}! {place}にいるよ!") input_en_name = input("動物名を英語で入力してね!") search_animal(input_en_name)
実行
このコードを実行してみます。
new_shiro@cloudshell:~ (new-shiro)$ /usr/bin/python /home/new_shiro/search_animal.py 動物名を英語で入力してね!
試しにcat
と入力してみます。
new_shiro@cloudshell:~ (new-shiro)$ /usr/bin/python /home/new_shiro/search_animal.py 動物名を英語で入力してね!cat ねこだよ! ニャー! 家にいるよ!
このようにCloud StorageのCSVファイルから該当する情報を出力してくれます。
animals.csvに追記する
また、このように管理するファイルを分けておくと、情報を追加したい際にとても便利です。
新たに以下の動物を追加してみます。
dolphin,"いるか","キューキュー","海"
もちろん元のPythonコードを触らずにanimals.csv
に追記するだけで済みます。
en_name,jp_name,cry,place dog,"いぬ","ワン","外" cat,"ねこ","ニャー","家" horse,"うま","ヒヒーン","牧場" dolphin,"いるか","キューキュー","海"
確認のためPythonコードを実行し、dolphin
と入力します。
new_shiro@cloudshell:~ (new-shiro)$ /usr/bin/python /home/new_shiro/search_animal.py 動物名を英語で入力してね!dolphin いるかだよ! キューキュー! 海にいるよ!
もちろん出力されますね!
最後に
このように、必要な情報はPythonコード外から取得しましょう!
今回はわかりやすいように動物をテーマにしておりますが、configファイルとして利用すると入力値に対して適切な値やパス等を返してくれるので便利ですね。
また、今回コード内で使用したread_csv
は直接gsutil URIを参照することもできるそうなので、次はそちらを調べてみようと思います。
以上です。ここまでお読みいただきありがとうございました。
引用・参照まとめ
- Cloud Shell エディタのインターフェースの概要 | Google Cloud
- Class Blob (2.13.0) | Python client library | Google Cloud - download_as_bytes
- io --- ストリームを扱うコアツール — Python 3.12.0 ドキュメント - io.BytesIO
- pandas.read_csv — pandas 2.1.3 documentation - pandas.read_csv
- pandas.DataFrame.query — pandas 2.1.3 documentation - pandas.DataFrame.query
- pandas.DataFrame.loc — pandas 2.1.3 documentation - pandas.DataFrame.loc